// new Promise((aa) => {
//     bb(123)
// }).then(e => {
//     console.log(e)
// }).then(e => {
//     console.log(456)
// }).then(e => {
//     console.log(789)
// }).then(e => {
//     console.log("012")
// }).then(e => {
//     console.log("345")
// }).catch(e => {
//     console.log(e)
//     return Promise.reject()
// }).catch(() => {
//     console.log("abc")

// }).then(() => {
//     console.log("def")
// }).finally(() => {
//     console.log("1111111")
// }).finally(() => {
//     console.log("2222")
// })
// 三个状态 成功 失败 进行中  pedding resolve(fulfilled) reject
// 1.可以无限.then 但是 .catch 只能执行一次 除非 在回调函数中 然后 Promise.reject() 也可以无限.finally
// 链式操作 =》.then  .catch  .all .finally .race
// promie 通常都是和async 和await 搭配使用 
// async await 容易维护 可以把 异步转同步
// await 当遇到promise.reject()的时候 会终止执行（报错） =》 后面的代码就不执行了
// await 必须是在async修饰的方法中使用
// async 修饰的方法 返回值一定是一个promise
// promise 的回调中 只能返回1个参数  
// .all 一旦有一个失败 就代表整个全部失败
// .race 谁快 使用谁的回调
function a(){
    return new Promise((resolve, reject) => {
        reject(1)
    })
}


function d(){
    return new Promise((resolve, reject) => {
        resolve(1)
    })
}
async function b(){
    let c
    try {
        c=await a()
    } catch (error) {
        
    }
    
    let f=await d()
    // console.log("结果")
    // console.log(c,f)
}
b()

// $.ajax({
//     url: "",
//     type: "",
//     success: (e) => {
//         $.ajax({
//             url: "",
//             type: "",
//             success: (e) => {
//                 $.ajax({
//                     url: "",
//                     type: "",
//                     success: (e) => {
//                         $.ajax({
//                             url: "",
//                             type: "",
//                             success: (e) => {

//                             }
//                         })
//                     }
//                 })
//             }
//         })
//     }
// })

// axios.get("/").then(() => {
//     axios.get("/").then(() => {
//         axios.get("/").then(() => {
//             axios.get("/").then(() => {

//             })
//         })
//     })
// })

// async await =>容易维护

// let a =await axios.get("/")
// let b =await  axios.get("/")
// let c =await  axios.get("/")
// let d =await  axios.get("/")


function sleep(){
    return new Promise((resolve, reject) => {
        setTimeout(()=>{
            resolve(4)
        },100)
    })
}


async function  run(){
    // return Promise.reject(6)
}
async function go(){
    let a =await run()
    console.log(a)
    request1().catch(e=>{ console.log(e)})
    // console.log(,119)
    console.log(request2(),120)
}
// console.log(31)
// await sleep()
// console.log(32)
go()

function request1(){
    return new Promise((resolve, reject) => {
        resolve(1,2)
        // reject(1)
    })
}

request1().then((a,b)=>{
    console.log(a,b)
})

async function request2(){
    return 2
    // return Promise.reject
}

Promise.all([run(),request1(),request2()]).then(e=>{
    console.log(e)
}).catch(e=>{
    console.log(e,"报错")
})

Promise.race([sleep(),run(),request1(),request2()]).then(e=>{
    console.log(e,152)
}).catch(e=>{
    console.log("失败了")
})

// class AAA{

// }

// let BBB = new AAA()
// BBB.__proto__.add=function(a,b){
//     return a+b
// }

// console.log(BBB.add(1,2).add(6,7),167)

// console.log(BBB)

// vue2 和 vue3 =》

